草庐IT

Ruby Regex 舍入尾随零

全部标签

具有明确舍入策略的整数除法 C++ 函数

我想要C++中的某些东西,让我可以使用指定的舍入行为进行高效的整数除法,如下所示:div_down(-4,3)==>-2div_up(4,3)==>2div_to_zero(-4,3)==>-1div_to_nearest(5,3)==>2我希望它能在编译时检测目标机器的行为并生成适当的最佳实现。类似模数的东西也很好,在编译时抽象出负操作数的未定义行为。这个存在吗?如果不是,有什么好的制作方法?我可以想到一些可能的方法:尝试将它们实现为静态优化的单个表达式使用常量表达式来检测目标行为并从多个实现中进行选择,可能使用模板(但究竟如何?) 最佳答案

c++ - 为什么未命名的结构不能用作尾随返回类型?

struct{inta,b;}f(intx,inty)//OK{return{x,y};}autog(intx,inty)->struct{inta,b;}//errorC2332{return{x,y};}intmain(){auton=f(1,2).a;//OK}我的编译器是VC++2013RC。为什么g错误而f正常?这是VC++的bug吗? 最佳答案 实际上,在C++中,在参数或返回类型中定义类型是非法的,无论是否命名。参见C++11[diff.decl]:Change:InC++,typesmaynotbedefinedin

c++ - 十六进制数 C/C++ 中的尾随 u

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:MeaningofUsuffix我正在查看具有一堆定义的代码,如下所示:#defineHEX_NUMBER(0x000000FFu)尾随的u是什么?我试过使用它和不使用它进行编译,我看不出有任何区别。

c++ - 将 float 舍入为 n 位有效数字的 C 例程?

假设我有一个float。我想将它四舍五入到一定数量的有效数字。在我的例子中n=6。所以说float是f=1.23456999;round(f,6)会得到1.23457f=123456.0001会得到123456有人知道这样的套路吗?它在网站上有效:http://ostermiller.org/calc/significant_figures.html 最佳答案 将数字乘以合适的比例因子,将所有有效数字移至小数点左侧。然后四舍五入最后反转操作:#includedoubleround_to_digits(doublevalue,intd

c++ - 用 ostringstream 舍入 float

我有一个关于使用ostringstream从float到C++字符串的转换的问题。这是我的台词:voiddoSomething(floatt){ostringstreamstream;stream当t的值为-0.89999时,它会四舍五入为-0.9,但当它的值为0.0999或小于1.754e-7时,它只会打印而不会四舍五入。有什么解决方案。 最佳答案 您需要使用precision设置ostringstream的精度例如stream.precision(3);stream 关于c++-用o

c++ - gcc 的 __float128 float 是否考虑了当前的舍入模式?

gcc的__float128float的算术运算是否考虑了当前的舍入模式?例如,如果使用C++11函数std::fesetenv,我将舍入模式更改为FE_DOWNWARD,将对进行算术运算的结果__float128向下舍入?这是否由__float128规范保证? 最佳答案 我相信保证__float128上的操作考虑了舍入模式。根据GNUC库文档,浮点计算遵循舍入模式。根据GCC手册__float128是一个支持除法等算术运算的浮点类型。据此我推断,对于__float128的操作,必须考虑舍入模式。GNUC库文档指出:20.6Roun

c++ - 解决浮点舍入问题 C++

我开发了一个科学应用程序(模拟染色体在细胞核中的移动)。染色体被分成小片段,使用4x4旋转矩阵围绕随机轴旋转。问题在于模拟执行了数千亿次旋转,因此浮点舍入误差会叠加并呈指数增长,因此随着时间的推移,片段往往会“漂浮”并与染色体的其余部分分离。我在C++中使用double。该软件目前在CPU上运行,但将移植到CUDA,最多模拟1个月。我不知道如何以某种方式重新规范化染色体,因为所有片段都链接在一起(您可以将其视为双向链表),但我认为这是最好的主意,如果可能的话。你有什么建议吗?我觉得有点失落。非常感谢,H.编辑:添加了简化的示例代码。您可以假设所有矩阵数学都是经典实现。//Rotate1

c++ - 向上和向下舍入数字 C++

我试图让我的程序分别向上和向下舍入一个数字。例如,如果数字是3.6,我的程序假设对最接近的数字4进行四舍五入,如果数字是3.4,它将被四舍五入减少到3。我尝试使用ceil库来获取3个项目的平均值。results=ceil((marks1+marks2+marks3)/3)但是,ceil仅将数字向下舍入,而不会向上舍入。我偶然发现了1种算法varroundedVal=Math.round(origVal*20)/20;但我还是想不出一些问题的公式。 最佳答案 std::ceil四舍五入到最接近的整数std::floor四舍五入到最接近

c++ - 通用 lambda、继承和尾随返回类型 : is this valid code?

注意:我正在向clang提出问题,但我想确保我的代码也有效。我正在尝试回复anotheranswer我在使用lambda和继承时发现了一些困难。考虑以下最小示例:templatestructBase:Func{Base(Funcfunc):Func{func}{}templateautooperator()(Args...args)->decltype(Func::operator()(args...),void()){Func::operator()(args...);}};intmain(){autol=[](auto&&){};Basemixin{l};mixin(0);}海湾合

c++ - 令人费解的非尾随参数包行为

我遇到了一些有趣的可变参数模板函数行为。任何人都可以指出定义此标准的相关规则吗?GCC,ICC和MSVC成功编译以下代码(Clang没有,但我知道这是由于编译器错误造成的)。templatevoidfoo(A,Bs...,C){}intmain(){foo(1,2,3,4,5);}在调用foo时,为A和Bs提供模板参数,然后推导C为int。但是,如果我们简单地翻转最后两个模板参数:templatevoidfoo(A,Bs...,C){}然后allthreecompilers抛出错误。这是来自GCC的:main.cpp:Infunction'intmain()':main.cpp:8:4